import {BasicColumn, FormSchema} from "/@/components/Table";
import {uploadFileApi} from "/@/api/platform/file";
import {uploadApi} from "/@/api/platform/upload";

/**
 * 资质证照数据表头
 */
export const certificateInfoTableColumns: BasicColumn[] = [
  {
    title: '资质证照ID',
    dataIndex: 'id',
    fixed: 'left',
    width: 100,
    ifShow: false,
  },
  {
    title: '组织代码',
    dataIndex: 'orgcode',
    fixed: 'left',
    width: 100,
    ifShow: false,
  },
  {
    title: '名称',
    dataIndex: 'name',
    width: 120,
    ifShow: true,
      sorter: (a, b) => {
          // 处理空值情况
          if (!a.name && !b.name) return 0;
          if (!a.name) return -1;
          if (!b.name) return 1;

          // 使用 localeCompare 进行中文排序
          return a.name.localeCompare(b.name, 'zh-CN', {
              numeric: true,        // 数字排序
              sensitivity: 'base'   // 不区分大小写
          });
      },
    sortDirections: ['ascend', 'descend'],
    defaultSortOrder: 'ascend' // 默认按名称正序（A-Z）
  },
  {
    title: '类型',
    dataIndex: 'type',
    width: 100,

  },
  {
    title: '编号',
    dataIndex: 'no',
    width: 100,
  },
  {
      title: '发证机构',
      dataIndex: 'authority',
      width: 100,

  },
  {
    title: '发证时间',
    dataIndex: 'assigntm',
    width: 70,
    sorter: (a, b) => {
      // 处理空值情况
      if (!a.assigntm && !b.assigntm) return 0;
      if (!a.assigntm) return -1;
      if (!b.assigntm) return 1;

      // 将日期字符串转换为Date对象进行比较
      const dateA = new Date(a.assigntm);
      const dateB = new Date(b.assigntm);
      return dateA.getTime() - dateB.getTime();
  },
    sortDirections: ['descend', 'ascend'],
    defaultSortOrder: 'descend', // 默认按发证时间倒序
  },
  {
      title: '过期时间',
      dataIndex: 'expiredtm',
      width: 70,
      sorter: (a, b) => {
          // 处理空值情况（空值表示不过期，应该排在最后）
          if (!a.expiredtm && !b.expiredtm) return 0;
          if (!a.expiredtm) return 1;  // 不过期的排在后面
          if (!b.expiredtm) return -1; // 不过期的排在后面

          // 将日期字符串转换为Date对象进行比较
          const dateA = new Date(a.expiredtm);
          const dateB = new Date(b.expiredtm);
          return dateA.getTime() - dateB.getTime();
      },
      sortDirections: ['descend', 'ascend'],
  },
  {
      title: '状态',
      dataIndex: 'isvalid',
      width: 50,
      slots: { customRender: 'isvalid' }
  },
  {
      title: '持证人id',
      dataIndex: 'holduserid',
      ifShow: false,
      width: 100,
  },
  {
      title: '持证人/单位',
      dataIndex: 'holdusername',
      width: 100,
      slots: { customRender: 'holdusername' } // 添加自定义渲染
  },
  {
      title: '是否为相关方',
      dataIndex: 'isepiboly',
      width: 70,
      ifShow: false,
      slots: { customRender: 'isepiboly' }
  },
  {
      title: '是否为人员',
      dataIndex: 'isperson',
      ifShow: false,
      width: 100,
      slots: { customRender: 'isperson' }
  },
]

/**
 * 资质证照查询表单
 */
export const certificateInfoTableQueryConditionFormSchemas: FormSchema[] = [
    {
        field: 'keywords',
        label: '关键词',
        component: 'Input',
        colProps: {
            span: 6,
        },
        componentProps: {
            placeholder: '证照名称/类型/编号/发证机构/取证人',
        },
    },
    {
        field: 'status',
        label: '状态',
        component: 'Select',
        defaultValue: '全部',
        componentProps: {
            options: [
                { label: '全部', value: '' },
                { label: '有效', value: '1' },
                { label: '过期', value: '0' },
            ],
        },
        colProps: {
            span: 4,
        },
    },
    {
        field: 'holdtype',
        label: '持证类型',
        component: 'Select',
        defaultValue: '',
        componentProps: {
            options: [
                { label: '全部', value: '' },
                { label: '单位资质', value: '1' },
                { label: '人员资质', value: '2' },
            ],
        },
        colProps: {
            span: 4,
        },
    },

    {
        field:'isepiboly',
        label:'',
        component:'RadioGroup',
        defaultValue: false,
        componentProps:{
            optionType: 'button', // 这是关键属性
            buttonStyle: 'solid', // 实心按钮样式
            options: [
                { label: '本单位', value: false },
                { label: '相关方', value: true },
            ],
        },
        colProps: {
            span: 3,
        }
    },
    {
        field:'epiboly',
        label:'相关方名称',
        component:'Select',
        colProps: {
            span: 5,
        },
        show:({values })=>{
            return values.isepiboly===true;
        },
        componentProps:{
            fieldNames:{
                label:'label',
                value:'value'
            },
            options:[],//这里需要从API获取相关方列表数据
            placeholder: '请选择相关方名称'
        }

    },
]

/**
 * 定义新增和修改的证照数据表单
 */
export const certificateInfoFormSchema: FormSchema[] = [
    {
        field: 'isepiboly',
        label: '所属单位',
        component: 'RadioGroup',
        defaultValue: false,
        componentProps: {
            options:[
                {label:'本单位',value:false},
                {label:'相关方',value:true},

            ]
        },
        colProps: {
            span: 12,
        },
        renderComponentContent: '相关方证照',
    },
    {
        field: 'isperson',
        label: '证照类型',
        component: 'RadioGroup',
        defaultValue: true,
        componentProps: {
            options: [
                { label: '单位证照', value: false },
                { label: '人员证照', value: true },
            ],
        },
        colProps: {
            span: 12,
        },

    },
    {
        field: 'epibolyunit',
        label: '相关方单位',
        component: 'Select',
        colProps: {
            span: 10,
        },
        required: false,
        show: ({ values }) => {
            // 只有相关方+人员证照时才显示此字段
            return values.isepiboly === true && values.isperson === true;
        },
        componentProps: {
            placeholder: '请先选择相关方单位',
            fieldNames: {
                label: 'label',
                value: 'value',
            },
            options: [], // 动态设置
            allowClear: true,
            onChange: (value, option) => {
                console.log('选择相关方单位:', value, option);
                // 这个onChange会在AddOrUpdateCertificateInfo.vue中重新配置
            },
        },
    },
    {
        field: 'holdusername',
        label: '持证人/单位:',
        component: 'Select',
        colProps: {
            span: 10,
        },
        required: false,
        show:({values})=>{
            // 显示逻辑：
            // 1. 相关方证照（无论单位还是人员）都需要选择持证人
            // 2. 本单位的人员证照需要选择持证人
            // 3. 本单位的单位证照不需要选择持证人

            const isEpiboly = values.isepiboly === true;
            const isPerson = values.isperson === true;
            const shouldShow = isEpiboly || isPerson;

            // 本单位证照：只有人员证照才显示
            return shouldShow;
        },
        componentProps: {
            placeholder: '请选择持证人名称',
            fieldNames: {
                label: 'unitname',
                value: 'unitid',
            },
            options: [], // 这里需要从API获取人员列表数据
            allowClear: true,
        },

    },
    {
        field: 'id',
        label: '证照ID',
        component: 'Input',
        show: false,
    },
    {
        field: 'orgcode',
        label: '组织代码',
        component: 'Input',
        show: false,
    },
    {
        field: 'name',
        label: '证照名称',
        component: 'Input',
        required: true,
        colProps: {
            span: 24,
        },

    },
    {
        field: 'type',
        label: '证件类型',
        component: 'AutoComplete',
        required:false,
        colProps: {
            span: 12,
        },
        componentProps: {
            placeholder: '请选择或输入证件类型',
            options: [
                { label: '环境管理体系(如:ISO 14001)', value: '环境管理体系' },
                { label: '职业健康安全管理体系(如:ISO 45001)', value: '职业健康安全管理体系' },
                { label: '人员资格证书（如:安全员证、电工证）', value: '人员资格证书' },
                { label: '信息安全管理体系（如: ISO 27001）', value: '信息安全管理体系' },
                { label: '产品安全认证（如:安全员证、电工证）', value: '产品安全认证' },
            ],
        },
        allowClear: true,
        filterOption: true

    },
    {
        field: 'no',
        label: '资质证照编号',
        component: 'Input',
        required:false,
        colProps: {
            span: 12,
        },

    },
    {
        field: 'authority',
        label: '发证机构',
        component: 'Input',
        required:false,
        colProps: {
            span: 12,
        },
    },
    {
        field: 'assigntm',
        label: '发证时间',
        component: 'DatePicker',
        componentProps: {
            style: {
                width: '100%',
            },
            valueFormat: 'YYYY-MM-DD',
        },
        required:false,
        colProps: {
            span: 12,
        },
    },
    {
        field: 'expiredtm',
        label: '过期时间',
        component: 'DatePicker',
        componentProps: {
            style: {
                width: '100%',
            },
            valueFormat: 'YYYY-MM-DD',
        },
        required:false,
        helpMessage: '留空表示不过期',
        colProps: {
            span: 12,
        },
    },
    {
        field: 'holduserid',
        label: '持证人ID',
        component: 'Input',
        colProps: {
            span: 12,
        },
        required: false,
        show: false,
    },
    {
        field: 'attachment',
        label: '证照附件',
        component: 'Upload',
        colProps: {
            span: 24,
        },
        componentProps: {
            api: uploadApi,
            maxSize: 10, // 10MB
            multiple: true,
            accept: ['jpg', 'jpeg', 'png', 'pdf', 'doc', 'docx'],
            emptyHidePreview: true, // 没有文件时隐藏预览按钮
            showPreviewNumber: true, // 显示预览文件数量
        },
    },
]
